/*
 * Copyright (C) 2015 truth
 *
 * This program is non-free software, but you can redistribute it and/or modify
 * it if you are in hjj(Huangshi Hejianjiao) team.
 */
package com.truthbean.jutils.dao;

import java.util.List;
import java.util.Map;
import java.util.Set;

import com.truthbean.jutils.dao.apache.BaseDao;

/**
 * 重载或增加core.dao.apache.BaseDao的方法
 *
 * @param <T>
 * @since Jan 15, 2015 11:20:28 AM
 * @author TruthBean
 */
public interface TBBaseDao<T> extends BaseDao<T> {

    /**
     * 执行 INSERT 操作, 返回插入后的记录的 ID
     *
     * @param sql: 待执行的 SQL 语句
     * @param args: 填充占位符的可变参数
     * @return: 插入新记录的 id
     */
    public long insertAction(String sql, Object... args);

    /**
     * 执行 UPDATE 操作, 包括 INSERT(但没有返回值), UPDATE, DELETE
     *
     * @param sql: 待执行的 SQL 语句
     * @param args: 填充占位符的可变参数
     * @return
     */
    public long updateAction(String sql, Object... args);

    /**
     * 执行一个属性或值的查询操作 例如查询某一条记录的某个字段, 或查询某个统计信息, 返回要查询的内容
     * 原始名称为getSingleValAction，为缩短名称长度，更改为getSVAction
     *
     * @param sql
     * @param args
     * @return
     */
    public Object getSVAction(String sql, Object... args);

    /**
     * 查询单个blob数据，返回String类型 原始名称为getSingleBlobValAction，为缩短名称长度，更改为getSBVAction
     *
     * @param sql
     * @param args
     * @return 查询单个blob数据，返回String类型
     */
    public String getSBVAction(String sql, Object... args);

    /**
     * 查询单个blob数据，返回list集合
     * 原始名称为getSingleBlobValForListAction，为缩短名称长度，更改为getSBV4LAction
     *
     * @param sql
     * @param args
     * @return 
     */
    public List<String> getSBV4LAction(String sql, Object... args);

    /**
     * 查询单个blob数据，返回set集合
     * 原始名称为getSingleBlobValForSetAction，为缩短名称长度，更改为getSBV4SAction
     *
     * @param sql
     * @param args
     * @return 
     */
    public Set<String> getSBV4SAction(String sql, Object... args);

    /**
     * 查询单个数据，返回set集合 原始名称为getSingleValForSetAction，为缩短名称长度，更改为getSV4SAction
     *
     * @param <V>
     * @param sql
     * @param args
     * @return Set 集合
     */
    public <V> Set<V> getSV4SAction(String sql, Object... args);

    /**
     * 查询单个数据，并将其通过split拆分成多个String值，将其装入set集合
     * 原始名称为getSingleValSplitedForSetAction，为缩短名称长度，更改为getSVS4SAction
     *
     * @param sql
     * @param split
     * @param args
     * @return Set
     */
    public Set<String> getSVS4SAction(String sql, String split, Object... args);

    /**
     * 执行两个属�?�或值的查询操作，返回Map对象
     * 原始名称为getDoubleValForMapAction，为缩短名称长度，更改为get2V4MAction
     *
     * @param sql
     * @param args
     * @return Map对象
     */
    public Map<Object, Object> get2V4MAction(String sql, Object... args);

    /**
     * 执行两个属�?�或值的查询操作，并将第二个值拆分放在数组中，返回Map对象
     * 原始名称为getDoubleValForMapAction，为缩短名称长度，更改为get2V4MAction
     *
     * @param sql
     * @param split
     * @param args
     * @return Map对象
     */
    public Map<String, String[]> get2V4MAction(String sql, String split, Object... args);

    /**
     * 执行批量更新操作
     *
     * @param sql: 待执行的 SQL 语句
     * @param args: 填充占位符的可变参数
     * @return
     */
    public int[] batchAction(String sql, Object[][] args);

}
